#ifndef FUSION_MULS_H
#define FUSION_MULS_H

template<typename InputDataType_>
class FusionMuls {
public:
    using InputDataType = InputDataType_;

    struct Arguments {};
    struct Params {};

    __host_aicore__ static Params InitParams(Arguments const& args) { return {}; }
    __host_aicore__ static size_t GetWorkSpaceSize(Arguments const& args) { return {}; }

    __aicore__ inline void Run(
        const AscendC::LocalTensor<InputDataType>& out,
        const AscendC::LocalTensor<InputDataType>& input,
        const InputDataType scalar,
        int64_t calcElemNum
    ) {
        AscendC::PipeBarrier<PIPE_V>();
        AscendC::Muls(out, input, scalar, calcElemNum);
        AscendC::PipeBarrier<PIPE_V>();
    }

    __aicore__ inline void operator()(
        const AscendC::LocalTensor<InputDataType>& out,
        const AscendC::LocalTensor<InputDataType>& l,
        const InputDataType r,
        int64_t calcElemNum
    ) {
        Run(out, l, r, calcElemNum);
    }
};

#endif